perm filename SAILCT[901,BGB] blob sn#129630 filedate 1974-11-12 generic text, type T, neo UTF8
00100	TITLE SAILCT - SAIL ACCESIBLE CART ROUTINES
00200	;THERE ARE TWO ROUTINES: CART AND STCART. STCART STARTS UP CARCON
00300	;AND CART SENDS COMMANDS.
00400	;THE CALLING SEQUENCE FOR CART IS:
00500	
00600	; PUSH P,[DEV]
00700	; PUSH P,[TIME]
00800	;PUSH P,[ANGLE]
00900	;PUSHJ P,CART
00950	
01000	;THE DEVICE NUMBERS,TIMES AND ANGLES ARE INTERPRETED AS GIVEN ON THE
01100	;COMMENTS PAGE OF "CARCON",EXCEPT THAT PASSING A ZERO DEVICE NUMBER
01200	;CAUSES ALL THE PREVIOUS COMMANDS TO BE MAILED TO THE CART CONTROLLER.
01300	;NOTE THIS WELL! NOTHING IS SENT TO THE CART UNTIL THE STATEMENT
01400	;  "CART(0,#,#)" IS EXECUTED IN SAIL. (THE 2ND AND 3RD ARGUMENTS ARE IGNORED.
01450	
01500	;A THIRD ROUTINE IS INCLUDED FOR DEBUGGING AND GENERAL CON-
01600	;VENIENCE.  IT IS CALLED "PTYCTL",AND CONTAINS FACILITIES
01700	;FOR TALKING TO THE PSEUDOTELETYPE SET UP BY STCART TO
01800	;RUN CARCON. IF YOU GET INTO DDT AND SAY "PUSHJ P,PTYCTL$X"
01900	;FROM THEN ON YOUR TTY WILL ACT AS IF IT WAS THE TTY RUNNING
02000	;CARCON,WITH THE FOLLOWING KNOWN EXCEPTIONS:
02100	; 1) IF YOU TYPE <ALT MODE> YOU WILL GET TWO OF THEM TYPED
02200	;	ALTHOUGH ONLY ONE GOES TO THE PROGRAM
02300	; 2) LIKEWISE WITH <LINE FEED>
02400	; 3) IF YOU WANT ↑C,TYPE ↑X INSTEAD, IT WILL ECHO AS ↑C
02500	;	A REAL ↑C WILL GO TO YOUR ORIGINAL JOB!
02600	; 4) TO TERMINATE , TYPE ↑Y, AND YOU WILL GET BACK TO DDT IN
02700	;	YOUR ORIGINAL JOB
02800	
02900	;IF YOU CALL PTYCTL BEFORE STCART,THE PSEUDOTTY WILL NOT
03000	;NOT HAVE BEEN SET UP, AND YOUR REAL TTY WILL BE USED.
03100	;MANY STRANGE AND WONDERFUL EFFECTS WILL ENSUE
03200	;DON'T DO THIS!!!
03300	;AT LAST NOTE 5)<RUBOUT> WILL NOT GET TO YOUR PSEUDO TTY
03400	;THROUGH PTYCTL, THIS IS A SYSTEM HACK WHICH WILL BE FIXED SOMEDAY
     

00100	Z←1
00200	TEMP←2
00300	ADR←3
00400	P←17
00500	INTERNAL CART,STCART,PTYCTL
00600	OPDEF TTYUUO [51B8]
00700	OPDEF PTYUUO [711B8]
00800	OPDEF MAIL [710B8]
00900	OPDEF ECHO [TTYUUO 3,]
01000	OPDEF SEND [MAIL 0,]
01100	OPDEF SKPHIM [MAIL 4,]
01200	OPDEF PTYGET [PTYUUO 0,]
01300	OPDEF PTYOUT [PTYUUO 11,]
01400	OPDEF PTYR1S [PTYUUO 4,]
01500	OPDEF PTYR1W [PTYUUO 5,]
01600	MADR:SIXBIT/CARCON/
01700		MBOX
01800	PADR:	BLOCK 2
01900	MBOX:	BLOCK 40
02000	MPTR:	-1
02100	CART:	SKIPN Z,-3(P)
02200		JRST MLOFF	;MAIL IT NOW
02300		MOVS TEMP,-2(P)	;GET TIME IN LEFT HALF
02400		LSH TEMP,3
02500		LSHC Z,-3	;ASSEMBLE L.H.
02600		HRR TEMP,-1(P)
02700		MOVE Z,MPTR	;GET BUFFER POINTER
02800		PUSH Z,TEMP	;SEND IT OFF
02900		MOVEM Z,MPTR
03000		SUB P,[XWD 4,4]
03100		JRST @4(P)
03200	MLOFF:	SETCM TEMP,MPTR	;GET WC-1
03300		SUB TEMP,[XWD 37,0]
03400		MOVEM TEMP,MBOX	;PUT -(WC+1) IN MBOX
03500		PUSHJ P,PTTY
03600		SEND MADR	;MAIL IT OFF
03700		JRST [ECHO [ASCIZ/CARCON NOT RUNNING
03800	/]↔CALLI 12]
03900		SKPHIM MADR	;DID HE GET IT
04000		JRST .+3	;YES
04100		PUSHJ P,PTTY
04200		JRST .-3
04300		MOVE TEMP,[XWD -37,MBOX]
04400		MOVEM TEMP,MPTR	;RELOAD THE BUFFER POINTER
04500		SUB P,[XWD 4,4]
04600		JRST @4(P)
04700	PTTY:	PTYR1S PADR
04800		POPJ P,		;NO∀HING HERE
04900		ECHO [ASCIZ/
05000	MESSAGE FROM CARCON - /]
05100		TTYUUO 1,PADR+1
05200		PTYR1S PADR
05300		POPJ P,
05400		JRST .-3
     

00100	STCART:	PTYGET ADR	;ADR AND ADR+1 ARE ACCUMULATORS
00110	JRST [ECHO [ASCIZ /PTYGET FAILED, CAN'T START CARCON
00210	/]↔CALLI 12]
00250		MOVEM ADR,PADR
00300		MOVEI ADR+1,[ASCIZ/L
00400	/]
00500		PTYOUT ADR	;LOGIN
00525		PTYR1W ADR	;GET TYPEOUT
00550		CAIE ADR+1,"#"	;WAIT FOR "#"
00575		JRST .-2
00600		MOVEI ADR+1,[ASCIZ .C/ROD
00700	.]
00800		PTYOUT ADR	;PPPN
00825		PTYR1W ADR
00850		CAIE ADR+1,"."	;WAIT FOR MONITOR
00875		JRST .-2
00900		MOVEI ADR+1,[ASCIZ/RUN DSK CARCON
01000	/]
01100		PTYOUT ADR
01105		PTYR1W ADR
01110		CAIE ADR+1,"*"
01115		JRST .-2
01125		MOVE TEMP,[XWD -37,MBOX]
01175		MOVEM TEMP,MPTR
01200		POPJ P,
01300	
     

00100	PTYCTL:	PUSH P,ADR
00150		SETOM ADR
00200		TTYUUO 6,ADR	;GETLIN
00300		TLO ADR,404	;INHIBIT DUPLEXING AND SET PTYWAKE
00400		TTYUUO 7,ADR	;SETLIN
00800	PTYC1:	PTYR1S PADR
00850		JRST RLTTY
00900		SKIPN ADR,PADR+1	;FROM PTY?
01000		JRST RLTTY	;NO
01100		TTYUUO 1,PADR+1	;YES,ECHO IT TO REAL TTY
01200		JRST PTYC1
01300	RLTTY:	TTYUUO 2,ADR	;GET CHARCTER
01350		JRST PTYC1	;THERE WAS NO CHARCTER
01400		CAIN ADR,31	;CONTROL Y?
01500		JRST PTYCO
01525		CAIN ADR,30	;CONTROL X=↑C
01575		MOVEI ADR,3	;PUT ↑C IN ADR
01600		MOVEM ADR,PADR+1
01700		PTYUUO 7,PADR	;OUTPUT TO PTY
01800		JRST PTYC1
01900	PTYCO:	SETOM ADR	;RESET THE WORLD
02000		TTYUUO 6,ADR	;GETLIN
02100		TLZ ADR,404	;ENABLE DUPLEXING
02200		TTYUUO 7,ADR	;SETLIN
02400		POP P,ADR
02500		POPJ P,		;RETURN 
02600	END